home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / SECURITY / 0058.ZIP / PC-CODE2.151 < prev    next >
Text File  |  1984-02-09  |  20KB  |  726 lines

  1. 1000 '
  2. 1010 '
  3. 1020 '       <<<<<  P C - C O D E 2 . 1 5 1  >>>>>
  4. 1030 '
  5. 1040 '
  6. 1050 '     * * * * * * * * * * * * * * * * * * * *
  7. 1060 '     *                                     *
  8. 1070 '     *  COPYRIGHT 1984 by                  *
  9. 1080 '     *           Richard Nolen Colvard     *
  10. 1090 '     *           Freeware Distribution OK  *
  11. 1100 '     *           Public Domain use OK      *
  12. 1110 '     *                                     *
  13. 1120 '     *  WARNING: This Program must be      *
  14. 1130 '     *           Compiled with IBM         *
  15. 1140 '     *           BASCOM/T/O                *
  16. 1150 '     *           Donot use BASICA          *
  17. 1160 '     *                                     *
  18. 1170 '     *  Highly recommend 8087 link libs    *
  19. 1180 '     *                                     *
  20. 1190 '     * * * * * * * * * * * * * * * * * * * *
  21. 1200 '
  22. 1210 '
  23. 1220 DIM B#(31), C#(99), CONS!(7), CONS#(6), IX%(256)
  24. 1230 DIM BCNT%(31), CCNT%(99), CHNO%(256), SAV%(256)
  25. 1240 CONS!(1)=8: CONS!(2)=131072! : CONS!(3)=8192: CONS!(4)=128
  26. 1250 CONS!(5)=2: CONS!(6)=32 : CONS!(7)=2048 : L0% = 95 : K0% = L0% * 2
  27. 1260 CONS#(1)=1: CONS#(2)=128 : CONS#(3)=32768# : CONS!(4)=8388608#
  28. 1270 CONS#(5)=4096 : CONS#(6)=1048576# : ACNT! = 0
  29. 1280 M%=7: N%=17: YY# = 999991! : MU# = 16807 : MD# = 2147483647#
  30. 1290 SAME1! = 0 : SAME2! = 0 : TOT! = 0
  31. 1300 W1$="123456789012345678901234567890123456789012345678901234567890"
  32. 1310 W2$="         1         2         3         4         5         6"
  33. 1320 W3$=".........+.........+.........+.........+.........+.........+"
  34. 1330 W4$="         7         8         9        10        11        12"
  35. 1340 WH$="V1.51 PC-CODE2"
  36. 1350 WZ$="P C   C o m p u t e r   S e c u r i t y    " + WH$
  37. 1360 HDR$=WH$ + " ENCODED " + DATE$ + " " + TIME$
  38. 1370 FOR J%=1 TO M% : BCNT%(J%)=0 : NEXT J%
  39. 1380 FOR J%=1 TO N% : CCNT%(J%)=0 : NEXT J%
  40. 1390 FOR J%=1 TO 256 : CHNO%(J%)=0 : SAV%(J%)=J% : NEXT J%
  41. 1400 GOSUB 6590
  42. 1410 PRINT " " : PRINT " "
  43. 1420 PRINT "Debug Statistics will slow down program execution"
  44. 1430 INPUT "Do You Wish Debuging Statistics (Y OR N) ";A$
  45. 1440 A$=LEFT$(A$,1)
  46. 1450 IF A$ = "Y" OR A$ = "y" THEN DEBUG$="Y" ELSE DEBUG$="N"
  47. 1460 PRINT " " : PRINT " "
  48. 1470 INPUT "Do You Wish to Load KEYS from a FILE (Y or N) ";A$
  49. 1480 A$=LEFT$(A$,1)
  50. 1490 IF A$ = "Y" OR A$ = "y" THEN GOSUB 6810 : GOTO 2550
  51. 1500 CLS
  52. 1510 FOR J%=10 TO 15
  53. 1520 IF CL$="Y" THEN COLOR J%,9,1
  54. 1530 PRINT "P C - C O D E 2 ......Textual SuperEncipherment......"
  55. 1540 NEXT J%
  56. 1550 IF CL$="Y" THEN COLOR 15,9,1
  57. 1560 PRINT "  "
  58. 1570 PRINT "  "
  59. 1580 PRINT " ": PRINT " "
  60. 1590 PRINT " ": PRINT " "
  61. 1600 PRINT " Enter the type of KEY desired"
  62. 1610 PRINT "    Numeric; Number Only key ";
  63. 1620 IF CL$="Y" THEN COLOR 13,0,0: PRINT "N" : COLOR 15,9,1
  64. 1630 IF CL$="N" THEN PRINT "N"
  65. 1640 PRINT "    Alphabetic; alphanumeric ";
  66. 1650 IF CL$="Y" THEN COLOR 13,0,0: PRINT "A" : COLOR 15,9,1
  67. 1660 IF CL$="N" THEN PRINT "A"
  68. 1670 INPUT " Enter N or A "; T$
  69. 1680 T$=LEFT$(T$,1)
  70. 1690 IF T$="a" THEN T$="A"
  71. 1700 IF T$="n" THEN T$="N"
  72. 1710 IF T$ <> "A" AND T$ <> "N" THEN 1670
  73. 1720 IF T$="N" THEN 1770
  74. 1730 IF T$="A" THEN 3880
  75. 1740 '
  76. 1750 '
  77. 1760 '
  78. 1770 CLS
  79. 1780 PRINT WZ$
  80. 1790 PRINT " "
  81. 1800 PRINT " "
  82. 1810 PRINT " There are two(2) levels of Security HIGH and LOW"
  83. 1820 INPUT " Enter H for HIGH or L for LOW "; A$
  84. 1830 A$=LEFT$(A$,1)
  85. 1840 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 1800
  86. 1850 IF A$ = "H" OR A$ = "h" THEN 1980
  87. 1860 '
  88. 1870 '   ----------- LOW level of SECURITY -------------
  89. 1880 '
  90. 1890 PRINT " LOW Level of Security Selected"
  91. 1900 PRINT " "
  92. 1910 PRINT " You must now enter SEVEN (7) KEY numbers as indicated:"
  93. 1920 PRINT " "
  94. 1930 GOSUB 4090
  95. 1940 GOTO 2550
  96. 1950 '
  97. 1960 '
  98. 1970 '
  99. 1980 PRINT " "
  100. 1990 PRINT " You have Selected HIGH security"
  101. 2000 PRINT " "
  102. 2010 PRINT " You must enter ";1+N%+M%;" key numbers between 1 and 2,147,483,646"
  103. 2020 INPUT " A(1) ? "; A#
  104. 2030 A#=FIX(A#)
  105. 2040 IF A# < 1 OR A# >= MD# THEN GOSUB 2400: GOTO 2020
  106. 2050 PRINT " "
  107. 2060 '
  108. 2070 '
  109. 2080 FOR J%=1 TO M%
  110. 2090 PRINT " B(";J%;") ";
  111. 2100 INPUT B#(J%)
  112. 2110 B#(J%)=FIX(B#(J%))
  113. 2120 IF B#(J%) < 1 OR B#(J%) >= MD# THEN GOSUB 2400: GOTO 2090
  114. 2130 NEXT J%
  115. 2140 CLS
  116. 2150 '
  117. 2160 '
  118. 2170 FOR J%=1 TO N%
  119. 2180 PRINT " C(";J%;") ";
  120. 2190 INPUT C#(J%)
  121. 2200 C#(J%)=FIX(C#(J%))
  122. 2210 IF C#(J%) < 1 OR C#(J%) >= MD# THEN GOSUB 2400: GOTO 2180
  123. 2220 IF J% = 18 THEN CLS
  124. 2230 IF J% = 36 THEN CLS
  125. 2240 NEXT J%
  126. 2250 '
  127. 2260 GOTO 2550
  128. 2270 '
  129. 2280 '
  130. 2290 '
  131. 2300 PRINT "[";X%;"] ";
  132. 2310 INPUT "Enter a NUMBER between 1 and 9,999,999 "; K2!
  133. 2320 IF K2! < 1 OR K2! > 9999999! THEN GOSUB 2400: GOTO 2300
  134. 2330 Z!=K2!
  135. 2340 GOSUB 2490
  136. 2350 S!=Z!
  137. 2360 RETURN
  138. 2370 '
  139. 2380 '
  140. 2390 '   ---------- ERROR Messages ----------
  141. 2400 BEEP
  142. 2410 IF CL$="Y" THEN COLOR 4+16,0,0
  143. 2420 PRINT " ERROR: Number RANGE must be 1 to 9,999,999"
  144. 2430 IF CL$="Y" THEN COLOR 15,1,9
  145. 2440 BEEP
  146. 2450 RETURN
  147. 2460 '
  148. 2470 '
  149. 2480 '   ------ scaling ---------
  150. 2490 Z! = Z! / 100!
  151. 2500 IF Z! > 1! THEN 2490
  152. 2510 RETURN
  153. 2520 '
  154. 2530 '
  155. 2540 '
  156. 2550 CLS
  157. 2560 PRINT WZ$
  158. 2570 PRINT " ": PRINT " ": PRINT " "
  159. 2580 PRINT "Possible Output files:"
  160. 2590 PRINT "  'A:FILE.EXT'  'B:FILE.EXT'  'LPT1:'  'CON:'  'CAS1:'"
  161. 2600 PRINT "   for FILES the input and Output must be different"
  162. 2610 PRINT " "
  163. 2620 INPUT "Enter Output file name (Full name): "; U$
  164. 2630 IF U$ = "con:" THEN U$="CON:"
  165. 2640 IF U$ <> "CON:" THEN OPEN "O",2,U$
  166. 2650 PRINT " ": PRINT " "
  167. 2660 PRINT "Possible Input files:"
  168. 2670 PRINT "  'A:FILE.EXT'  'B:FILE.EXT'  'C:FILE.EXT'  'CON:'  'CAS1:'"
  169. 2680 PRINT " "
  170. 2690 INPUT "Enter Input FILE (full name): "; F1$
  171. 2700 IF F1$= "con:" THEN F1$="CON:"
  172. 2710 IF F1$ <> "CON:" THEN OPEN "I",1,F1$
  173. 2720 PRINT " "
  174. 2730 PRINT " "
  175. 2740 INPUT "Encode or Decode (E or D) ";EN$
  176. 2750 EN$=LEFT$(EN$,1)
  177. 2760 IF EN$ = "e" THEN EN$="E"
  178. 2770 IF EN$ = "d" THEN EN$="D"
  179. 2780 IF EN$ <> "D" AND EN$ <> "E" THEN 2740
  180. 2790 IF EN$="E" AND U$ <> "CON:" THEN PRINT #2, HDR$
  181. 2800 IF EN$ <> "D" THEN 2870
  182. 2810 IF F1$="CON:" THEN 2870
  183. 2820 LINE INPUT #1, HDR$
  184. 2830 IF LEFT$(HDR$,14) = WH$ THEN 2870
  185. 2840 PRINT "* * * File was never Encoded by "; WH$
  186. 2850 PRINT "      file header = "; HDR$
  187. 2860 END
  188. 2870 CLS: PRINT WZ$: PRINT " ": PRINT " "
  189. 2880 IF CL$="Y" THEN COLOR 4+16,0,0
  190. 2890 IF CL$="N" THEN COLOR 7+16,0
  191. 2900 PRINT " * * * R U N N I N G * * *"
  192. 2910 IF CL$="Y" THEN COLOR 15,9,1
  193. 2920 IF CL$="N" THEN COLOR 7,0
  194. 2930 PRINT " "
  195. 2940 IF F1$="CON:" THEN PRINT "--> Terminate Console Input with use '//END'"
  196. 2950 IF EN$="D" AND F1$ <> "CON:" THEN PRINT "File Header: "; HDR$
  197. 2960 PRINT " "
  198. 2970 IF F1$ = "CON:" THEN 3010
  199. 2980 IF EOF(1) <> 0 THEN 3590
  200. 2990 LINE INPUT #1, M$
  201. 3000 GOTO 3030
  202. 3010 LINE INPUT M$
  203. 3020 IF M$ = "//END" OR M$ = "//end" THEN 3590
  204. 3030 L%=LEN(M$)
  205. 3040 IF L% = 0 THEN 3390
  206. 3050 FOR JJ%=1 TO L%
  207. 3060 IX%(JJ%)=JJ%
  208. 3070 NEXT JJ%
  209. 3080 L9%=INT(L%/2)
  210. 3090 GOSUB 5990
  211. 3100 IF EN$="D" THEN GOSUB 6270
  212. 3110 FOR J%=1 TO L%
  213. 3120 H%=ASC( MID$(M$,J%,1))
  214. 3130 H% = H% - 32
  215. 3140 S#=A#
  216. 3150 L=M%
  217. 3160 GOSUB 3450
  218. 3170 A#=S#
  219. 3180 ACNT! = ACNT! + 1
  220. 3190 B%=O%
  221. 3200 L=N%
  222. 3210 S#=B#(B%)
  223. 3220 BCNT%(B%) = BCNT%(B%) + 1
  224. 3230 GOSUB 3450
  225. 3240 B#(B%)=S#
  226. 3250 B%=O%
  227. 3260 S#=C#(B%)
  228. 3270 CCNT%(B%) = CCNT%(B%) + 1
  229. 3280 L=L0%
  230. 3290 GOSUB 3450
  231. 3300 C#(B%)=S#
  232. 3310 IF EN$="E" THEN H% = H% + O%
  233. 3320 IF EN$="D" THEN H% = K0% + (H% - O%)
  234. 3330 H% = H% MOD L0%
  235. 3340 H% = H% + 32
  236. 3350 CHNO%(H%) = CHNO%(H%) + 1
  237. 3360 MID$(M$,J%,1)=CHR$(H%)
  238. 3370 NEXT J%
  239. 3380 IF EN$="E" THEN GOSUB 6270
  240. 3390 IF U$ <> "CON:" THEN PRINT #2, M$
  241. 3400 IF U$ = "CON:" THEN PRINT M$ : PRINT " "
  242. 3410 GOTO 2970
  243. 3420 '
  244. 3430 '
  245. 3440 '   -------- RANDOM NUMBER GENERATOR (1) ------
  246. 3450 S#=S# * MU#
  247. 3460 S#=S# - (MD# * INT(S# / MD#) )
  248. 3470 O%=1 + FIX(L * (S# / MD#) )
  249. 3480 RETURN
  250. 3490 '
  251. 3500 '
  252. 3510 '   -------- RANDOM NUMBER GENERATOR (2) ------
  253. 3520 S!=(S! + 1.352968) ^ 1.256973
  254. 3530 S!=S! - FIX(S!)
  255. 3540 O%=1 + FIX(L * S!)
  256. 3550 RETURN
  257. 3560 '
  258. 3570 '
  259. 3580 '
  260. 3590 PRINT " "
  261. 3600 IF U$ <> "CON:" THEN CLOSE 2
  262. 3610 IF F1$ <> "CON:" THEN CLOSE 1
  263. 3620 IF U$="CON:" THEN D! = 5 : GOSUB 7230 ' TIME DELAY                 $
  264. 3630 '
  265. 3640 '
  266. 3650 ' ------- CLEAR MEMORY & STOP --------
  267. 3660 INPUT "Wish to Save newly Computed KEYS to a FILE (Y or N) "; F$
  268. 3670 F$=LEFT$(F$,1)
  269. 3680 IF F$="Y" OR F$ = "y" THEN GOSUB 7040
  270. 3690 INPUT "Wish to Save Log Statistics for keys used (Y or N) "; F$
  271. 3700 F$=LEFT$(F$,1)
  272. 3710 IF F$="Y" OR F$ = "y" THEN GOSUB 7690
  273. 3720 Z!=0: A#=0: M$=SPACE$(128): S! = 0 : S# = 0
  274. 3730 FOR J%=1 TO M%
  275. 3740 B#(J%)=0 : BCNT%(J%)=0
  276. 3750 NEXT J%
  277. 3760 FOR J%=1 TO N%
  278. 3770 C#(J%)=0 : CCNT%(J%)=0
  279. 3780 NEXT J%
  280. 3790 FOR J%=1 TO 256
  281. 3800 IX%(J%)=0
  282. 3810 NEXT J%
  283. 3820 COLOR 7,0
  284. 3830 CLS
  285. 3840 END
  286. 3850 '
  287. 3860 '   ----------- ALPHANUMERIC KEYS -----------
  288. 3870 '
  289. 3880 CLS
  290. 3890 PRINT WZ$
  291. 3900 PRINT " "
  292. 3910 PRINT " "
  293. 3920 PRINT " There are two(2) levels of Security HIGH and LOW"
  294. 3930 INPUT " Enter H for HIGH or L for LOW "; A$
  295. 3940 A$=LEFT$(A$,1)
  296. 3950 IF A$ <> "H" AND A$ <> "h" AND A$ <> "L" AND A$ <> "l" THEN 3910
  297. 3960 IF A$ = "H" OR A$ = "h" THEN 5190
  298. 3970 '
  299. 3980 '   ----------- LOW level of SECURITY -------------
  300. 3990 '
  301. 4000 PRINT " LOW Level of Security Selected"
  302. 4010 PRINT " "
  303. 4020 PRINT " You must now enter SEVEN (7) key Alphanumerics as indicated:"
  304. 4030 PRINT " "
  305. 4040 GOSUB 4090
  306. 4050 GOTO 2550
  307. 4060 '
  308. 4070 '
  309. 4080 '   ---------- KEY 1 ---------
  310. 4090 X%=1 : M% = 11 : N% = 47
  311. 4100 IF T$ = "A" THEN GOSUB 5340
  312. 4110 IF T$ = "N" THEN GOSUB 2300
  313. 4120 GOSUB 3520
  314. 4130 GOSUB 3520
  315. 4140 A#=FIX((1# - S!) * MD#)
  316. 4150 '
  317. 4160 '
  318. 4170 '   ---------- KEY 2 ----------
  319. 4180 X%=2
  320. 4190 IF T$ = "A" THEN GOSUB 5340
  321. 4200 IF T$ = "N" THEN GOSUB 2300
  322. 4210 GOSUB 3520
  323. 4220 L=4
  324. 4230 FOR J%=1 TO M%
  325. 4240 GOSUB 3520
  326. 4250 O2% = O%
  327. 4260 FOR K%=1 TO O2%
  328. 4270 GOSUB 3520
  329. 4280 NEXT K%
  330. 4290 GOSUB 3520
  331. 4300 B#(J%)=FIX((1# - S!) * MD#)
  332. 4310 NEXT J%
  333. 4320 '
  334. 4330 '
  335. 4340 '   ---------- KEY 3 -----------
  336. 4350 X%=3
  337. 4360 IF T$ = "A" THEN GOSUB 5340
  338. 4370 IF T$ = "N" THEN GOSUB 2300
  339. 4380 GOSUB 3520
  340. 4390 L=3
  341. 4400 FOR J%=1 TO N%
  342. 4410 GOSUB 3520
  343. 4420 O2% = O%
  344. 4430 FOR K%=1 TO O2%
  345. 4440 GOSUB 3520
  346. 4450 NEXT K%
  347. 4460 GOSUB 3520
  348. 4470 C#(J%)=FIX((1# - S!) * MD#)
  349. 4480 NEXT J%
  350. 4490 '
  351. 4500 '
  352. 4510 '   ---------- KEY 4 -------------
  353. 4520 X%=4
  354. 4530 IF T$ = "A" THEN GOSUB 5340
  355. 4540 IF T$ = "N" THEN GOSUB 2300
  356. 4550 GOSUB 3520
  357. 4560 L=INT(N%/2)
  358. 4570 GOSUB 3520
  359. 4580 K%=O% + 1
  360. 4590 L=N%
  361. 4600 FOR J%=1 TO K%
  362. 4610 GOSUB 3520
  363. 4620 L%=O%
  364. 4630 GOSUB 3520
  365. 4640 C#(L%)=FIX(S! * MD#)
  366. 4650 NEXT J%
  367. 4660 '
  368. 4670 '
  369. 4680 '   ----------- KEY 5 ---------------
  370. 4690 X%=5
  371. 4700 IF T$ = "A" THEN GOSUB 5340
  372. 4710 IF T$ = "N" THEN GOSUB 2300
  373. 4720 GOSUB 3520
  374. 4730 L=INT(M%/2)
  375. 4740 GOSUB 3520
  376. 4750 K%=O% + 1
  377. 4760 L=M%
  378. 4770 FOR J%=1 TO K%
  379. 4780 GOSUB 3520
  380. 4790 L%=O%
  381. 4800 GOSUB 3520
  382. 4810 B#(L%)=FIX(S! * MD#)
  383. 4820 NEXT J%
  384. 4830 '
  385. 4840 '
  386. 4850 '   ------------ KEY 6 ---------------
  387. 4860 X%=6
  388. 4870 IF T$ = "A" THEN GOSUB 5340
  389. 4880 IF T$ = "N" THEN GOSUB 2300
  390. 4890 GOSUB 3520
  391. 4900 L=M%
  392. 4910 FOR J%=1 TO M%
  393. 4920 GOSUB 3520
  394. 4930 D#=B#(O%)
  395. 4940 B#(O%)=B#(J%)
  396. 4950 B#(J%)=D#
  397. 4960 NEXT J%
  398. 4970 '
  399. 4980 '
  400. 4990 '   ------------- KEY 7 --------------
  401. 5000 X%=7
  402. 5010 IF T$ = "A" THEN GOSUB 5340
  403. 5020 IF T$ = "N" THEN GOSUB 2300
  404. 5030 GOSUB 3520
  405. 5040 L=N%
  406. 5050 FOR J%=1 TO N%
  407. 5060 GOSUB 3520
  408. 5070 D#=C#(O%)
  409. 5080 C#(O%)=C#(J%)
  410. 5090 C#(J%)=D#
  411. 5100 NEXT J%
  412. 5110 '
  413. 5120 GOSUB 7440  ' Display generated keys
  414. 5130 '
  415. 5140 RETURN
  416. 5150 '
  417. 5160 '   ---------- end of LOW security ------------
  418. 5170 '
  419. 5180 '
  420. 5190 CLS
  421. 5200 PRINT " You must enter 3 long PASSWORDS of alphanumeric data"
  422. 5210 X%=1
  423. 5220 GOSUB 5530
  424. 5230 X%=M%
  425. 5240 GOSUB 5530
  426. 5250 X%=N%
  427. 5260 GOSUB 5530
  428. 5270 '
  429. 5280 GOSUB 7440  ' Display generated keys
  430. 5290 '
  431. 5300 GOTO 2550
  432. 5310 '
  433. 5320 '
  434. 5330 '   --------- alphanumeric password to RND ------------
  435. 5340 PRINT "[";X%;"] Enter Password: ";
  436. 5350 LINE INPUT P$
  437. 5360 L%=LEN(P$)
  438. 5370 IF L% < 6 THEN PRINT "  *** password too short; not > 5": GOTO 5340
  439. 5380 IF X%=1 THEN K# = 0
  440. 5390 FOR J%=1 TO L%
  441. 5400 C%=ASC( MID$(P$,J%,1) )
  442. 5410 LL%=J%
  443. 5420 IF LL% > 7 THEN LL% = LL% MOD 7 : LL%=LL%+1
  444. 5430 K# = K# + (CONS!(LL%) * C%)
  445. 5440 NEXT J%
  446. 5450 Z! = K#
  447. 5460 GOSUB 2480
  448. 5470 K# = K# - (YY# * INT( K# / YY#))
  449. 5480 S! = Z!
  450. 5490 RETURN
  451. 5500 '
  452. 5510 '
  453. 5520 '   ------- alphanumeric to DECIMAL --------
  454. 5530 X2%=X% * 6
  455. 5540 X3% = X2% : X4% = 0
  456. 5550 IF X%=1 THEN PRINT " (A) Enter Password of at least (MIN) ";X2%;" Chars"
  457. 5560 IF X%=M% THEN PRINT " (B) Enter Password of at least (MIN) ";X2%;" Chars"
  458. 5570 IF X2% > 60 THEN X3% = 60: X4% = X2% - 60: CLS: PRINT WZ$: PRINT " "
  459. 5580 IF X%=N% THEN PRINT " (C) Enter Password of at least (MIN) ";X2%;" Chars"
  460. 5590 PRINT "  ": PRINT " "
  461. 5600 PRINT "         "; LEFT$(W2$,X3%)
  462. 5610 PRINT "         "; LEFT$(W1$,X3%)
  463. 5620 PRINT "         "; LEFT$(W3$,X3%)
  464. 5630 PRINT "Password:";
  465. 5640 LINE INPUT P$
  466. 5650 PRINT "  "
  467. 5660 IF X4% = 0 THEN 5740
  468. 5670 PRINT "  ": PRINT " "
  469. 5680 PRINT "         "; LEFT$(W4$,X4%)
  470. 5690 PRINT "         "; LEFT$(W1$,X4%)
  471. 5700 PRINT "         "; LEFT$(W3$,X4%)
  472. 5710 PRINT "Password:";
  473. 5720 LINE INPUT P2$
  474. 5730 P$ = P$ + P2$
  475. 5740 L%=LEN(P$)
  476. 5750 IF L% < X2% THEN PRINT "   *** Password TOO SHORT reenter ": GOTO 5530
  477. 5760 T%=INT(L%/X%)
  478. 5770 K#=0
  479. 5780 FOR K%=1 TO X%
  480. 5790 P2$=LEFT$(P$,T%)
  481. 5800 L%=L%-T%
  482. 5810 IF L% < 1 THEN 5830
  483. 5820 P$=RIGHT$(P$,L%)
  484. 5830 FOR J%=1 TO T%
  485. 5840 LL%=J%
  486. 5850 IF LL% > 6 THEN LL%= LL% MOD 6 : LL%=LL%+1
  487. 5860 C% = ASC( MID$(P2$,J%,1) )
  488. 5870 K# =  K# + (CONS#(LL%) * C%)
  489. 5880 NEXT J%
  490. 5890 IF X%=1 THEN A#=K#
  491. 5900 IF X%=M% THEN B#(K%) = K#
  492. 5910 IF X%=N% THEN C#(K%) = K#
  493. 5920 K# = K# - (MD# * INT( K# / MD# ))
  494. 5930 NEXT K%
  495. 5940 RETURN
  496. 5950 '
  497. 5960 '
  498. 5970 '   ------ TRANSPOSITION -------
  499. 5980 '
  500. 5990 FOR JJ%=1 TO L%
  501. 6000 L=M%
  502. 6010 S#=A#
  503. 6020 GOSUB 3450
  504. 6030 A#=S#
  505. 6040 B%=O%
  506. 6050 L=N%
  507. 6060 S#=B#(B%)
  508. 6070 GOSUB 3450
  509. 6080 B#(B%)=S#
  510. 6090 B%=O%
  511. 6100 S#=C#(B%)
  512. 6110 L=L%
  513. 6120 GOSUB 3450
  514. 6130 C#(B%)=S#
  515. 6140 SWAP IX%(JJ%),IX%(O%)
  516. 6150 NEXT JJ%
  517. 6160 IF DEBUG$ = "N" THEN 6230
  518. 6170 FOR JJ%=1 TO L% : B% = IX%(JJ%)
  519. 6180 IF SAV%(JJ%) = B% THEN SAME1! = SAME1! + 1
  520. 6190 SAV%(JJ%) = B%
  521. 6200 IF B% = JJ% THEN SAME2! = SAME2! + 1
  522. 6210 NEXT JJ%
  523. 6220 TOT! = TOT! + L%
  524. 6230 RETURN
  525. 6240 '
  526. 6250 '
  527. 6260 '
  528. 6270 FOR JJ%=1 TO L9%
  529. 6280 G1%=IX%(JJ%)
  530. 6290 G2%=IX%(JJ%+L9%)
  531. 6300 G1$=MID$(M$,G1%,1)
  532. 6310 G2$=MID$(M$,G2%,1)
  533. 6320 SWAP G1$,G2$
  534. 6330 MID$(M$,G1%,1)=G1$
  535. 6340 MID$(M$,G2%,1)=G2$
  536. 6350 NEXT JJ%
  537. 6360 RETURN
  538. 6370 '
  539. 6380 '
  540. 6390 '
  541. 6400 ' ------ Help / Instructions -----
  542. 6410 OPEN "I",3,"PC-CODE2.DOC"
  543. 6420 CLS
  544. 6430 JJ%=1
  545. 6440 PRINT WZ$: PRINT " ": PRINT " "
  546. 6450 IF EOF(3) <> 0 THEN 6540
  547. 6460 LINE INPUT #3, M$
  548. 6470 PRINT M$
  549. 6480 JJ%=JJ%+1
  550. 6490 IF JJ% < 19 THEN 6450
  551. 6500 PRINT "======================="
  552. 6510 INPUT "Wish More Documentation (Yes or No)  <CR>=yes   "; Z$
  553. 6520 Z$=LEFT$(Z$,1)
  554. 6530 IF Z$ <> "N" AND Z$ <> "n" THEN 6420
  555. 6540 CLOSE 3
  556. 6550 RETURN
  557. 6560 '
  558. 6570 '
  559. 6580 '
  560. 6590 CLS
  561. 6600 PRINT WZ$: PRINT " ": PRINT " ":PRINT " "
  562. 6610 INPUT "Do you have COLOR installed on your PC (Yes or No) ";Z$
  563. 6620 Z$=LEFT$(Z$,1)
  564. 6630 IF Z$="y" THEN Z$="Y"
  565. 6640 IF Z$="n" THEN Z$="N"
  566. 6650 IF Z$ <> "Y" AND Z$ <> "N" THEN 6610
  567. 6660 CL$=Z$
  568. 6670 IF CL$="N" THEN 6700
  569. 6680 SCREEN 0,1
  570. 6690 COLOR 15,9,1
  571. 6700 PRINT " ": PRINT " "
  572. 6710 INPUT "Do you wish some instructions/Help (Yes or No) ";Z$
  573. 6720 Z$=LEFT$(Z$,1)
  574. 6730 IF Z$="y" THEN Z$="Y"
  575. 6740 IF Z$="n" THEN Z$="N"
  576. 6750 IF Z$ <> "Y" AND Z$ <> "N" THEN 6710
  577. 6760 IF Z$="Y" THEN GOSUB 6400
  578. 6770 RETURN
  579. 6780 '
  580. 6790 '
  581. 6800 '
  582. 6810 INPUT "Enter the Fully Qualified Input Key FILE name: "; F$
  583. 6820 OPEN "I", 5, F$
  584. 6830 LINE INPUT #5, P$
  585. 6840 IF LEFT$(P$,1) <> "*" THEN A#=VAL(P$): GOTO 6880
  586. 6850 INPUT #5, T%, M%, N%
  587. 6860 IF T% <> 1 THEN PRINT "*** ERROR *** Reading Bad Key File": END
  588. 6870 INPUT #5, A#
  589. 6880 A# = ABS( FIX( A# ) )
  590. 6890 IF EOF(5) <> 0 THEN PRINT "*** ERROR *** Reading Key File": END
  591. 6900 FOR J%=1 TO M% : INPUT #5, B#(J%)
  592. 6910 B#(J%) = ABS( FIX( B#(J%) ) ) : NEXT J%
  593. 6920 IF EOF(5) <> 0 THEN PRINT "*** ERROR *** Reading Key File": END
  594. 6930 FOR J%=1 TO N% : INPUT #5, C#(J%)
  595. 6940 C#(J%) = ABS( FIX( C#(J%) ) ) : NEXT J%
  596. 6950 IF EOF(5) <> 0 THEN PRINT "*** ERROR *** Reading Key File": END
  597. 6960 T% = M% + N% + 1
  598. 6970 PRINT "*** Loaded "; T% ;" Keys from "; F$; " Successfully"
  599. 6980 PRINT " ": D! = 4 : GOSUB 7230  ' TIME DELAY
  600. 6990 CLOSE 5
  601. 7000 RETURN
  602. 7010 '
  603. 7020 '
  604. 7030 '
  605. 7040 INPUT "Enter the Fully Qualified Output Key File Name: "; F$
  606. 7050 OPEN "O", 5, F$
  607. 7060 PRINT #5, "* HDR PC-CODE2 saved KEYS "
  608. 7070 WRITE #5, 1, M%, N%
  609. 7080 PRINT #5, A#
  610. 7090 FOR J%=1 TO M% : PRINT #5, B#(J%)
  611. 7100 NEXT J%
  612. 7110 FOR J%=1 TO N% : PRINT #5, C#(J%)
  613. 7120 NEXT J%
  614. 7130 PRINT #5, "* Keys computed on " + DATE$ + " " + TIME$ + " " + WH$
  615. 7140 T% = M% + N% + 1
  616. 7150 PRINT "*** Saved "; T% ;" Keys to "; F$; " Successfully"
  617. 7160 PRINT " ": D! = 4 : GOSUB 7230  ' TIME DELAY
  618. 7170 CLOSE 5
  619. 7180 RETURN
  620. 7190 '
  621. 7200 '
  622. 7210 '
  623. 7220 ' ------- Delay function -------
  624. 7230 GOSUB 7330
  625. 7240 D1! = TI!
  626. 7250 GOSUB 7330  '  Loop Here
  627. 7260 D2! = ABS( TI! - D1! )
  628. 7270 IF D2! < D! THEN 7250
  629. 7280 RETURN
  630. 7290 '
  631. 7300 '
  632. 7310 '
  633. 7320 ' ------- TIMER function --------
  634. 7330 TI! = VAL(LEFT$(TIME$,2)) * 3600
  635. 7340 TI! = TI! + (VAL( MID$(TIME$,4,2)) * 60)
  636. 7350 TI! = TI! + VAL(RIGHT$(TIME$,2))
  637. 7360 RETURN   ' TI! now contains seconds like TIMER
  638. 7370 '
  639. 7380 '
  640. 7390 '
  641. 7400 '
  642. 7410 '
  643. 7420 '
  644. 7430 ' ----- Generated Key Seeds display ------
  645. 7440 CLS: PRINT WZ$ : PRINT " ": PRINT " "
  646. 7450 PRINT "The following Numeric Keys/Seeds were generated:"
  647. 7460 PRINT " " : PRINT " "
  648. 7470 P$=SPACE$(16)
  649. 7480 PRINT "     ( A ) :    "; A#
  650. 7490 PRINT " "
  651. 7500 PRINT "     ( B ) :    ";
  652. 7510 FOR J%=1 TO M%
  653. 7520 PRINT LEFT$(STR$(B#(J%))+P$,16);
  654. 7530 NEXT J%
  655. 7540 PRINT " " : PRINT " "
  656. 7550 PRINT "     ( C ) :    ";
  657. 7560 FOR J%=1 TO N%
  658. 7570 PRINT LEFT$(STR$(C#(J%))+P$,16);
  659. 7580 NEXT J%
  660. 7590 PRINT " ": PRINT " "
  661. 7600 PRINT " --- To Print this screen depress 'Shift PrtSc' ---"
  662. 7610 D! = 20 : GOSUB 7230
  663. 7620 RETURN
  664. 7630 '
  665. 7640 '
  666. 7650 '
  667. 7660 '
  668. 7670 '
  669. 7680 ' ---- Save Log Statistics for Keys used -----
  670. 7690 PRINT "Enter Stat Log File Name or 'LPT1:' or default of blank"
  671. 7695 F$ = " "
  672. 7700 INPUT "Enter Log File Name: "; F$
  673. 7710 IF LEN(F$)=0 OR LEFT$(F$,1)=" " THEN F$="PC-STAT2.LOG"
  674. 7720 OPEN "O", 6, F$
  675. 7730 PRINT #6, " "
  676. 7740 PRINT #6, " <<<<< PC-CODE2 Statistics for Keys Used >>>>>"
  677. 7750 PRINT #6, " " : PRINT #6, " "
  678. 7755 PRINT #6, " Date and Time Stamp        = "; DATE$ + " " + TIME$
  679. 7760 PRINT #6, " Keys Setup (B) size        = "; M%
  680. 7770 PRINT #6, " Keys Setup (C) size        = "; N%
  681. 7780 PRINT #6, " Total Characters processed = "; ACNT!
  682. 7790 PRINT #6, " "
  683. 7800 PRINT #6, " ----- Key Utilitization/Balance -----"
  684. 7810 PRINT #6, " " : PRINT #6, " "
  685. 7820 PRINT #6, " * For Key Group (B)"
  686. 7830 PRINT #6, " "
  687. 7840 PRINT #6, "    KEY      Count"
  688. 7850 FOR J%=1 TO M%
  689. 7860 PRINT #6, USING "    ###    ####### "; J%, BCNT%(J%)
  690. 7870 NEXT J%
  691. 7880 PRINT #6, " " : PRINT #6, " "
  692. 7890 PRINT #6, " * For Key Group (C)"
  693. 7900 PRINT #6, " "
  694. 7910 PRINT #6, "    KEY      Count"
  695. 7920 FOR J%=1 TO N%
  696. 7930 PRINT #6, USING "    ###    ####### "; J%, CCNT%(J%)
  697. 7940 NEXT J%
  698. 7950 PRINT #6, " " : PRINT #6, " "
  699. 7960 PRINT #6, " * Output Character Set Statistics:"
  700. 7970 PRINT #6, " "
  701. 7980 PRINT #6, "    CHR$    Char     Count"
  702. 7990 PRINT #6, "    Num     ----     Occur"
  703. 8000 FOR J%=0 TO 255
  704. 8010 IF CHNO%(J%)=0 THEN 8040
  705. 8020 IF J% > 31 AND J% < 127 THEN P$=CHR$(J%) ELSE P$=" "
  706. 8030 PRINT #6, USING "    ####      !    ####### "; J%, P$, CHNO%(J%)
  707. 8040 NEXT J%
  708. 8050 PRINT #6, " "
  709. 8060 IF DEBUG$ = "N" THEN 8130
  710. 8070 PRINT #6, " ": PRINT #6, " * Debuging Statistics": PRINT #6, " "
  711. 8080 PRINT #6, " "
  712. 8090 PRINT #6, " Transposition count: "; TOT!, " 100%"
  713. 8100 PRINT #6, "      coincidences T1 "; SAME1!, 100 * (SAME1!/TOT!);"%"
  714. 8110 PRINT #6, "      coincidences T2 "; SAME2!, 100 * (SAME2!/TOT!);"%"
  715. 8120 PRINT #6, " ": PRINT #6, " "
  716. 8130 PRINT #6, " *** END of STATISTICAL LOG ***"
  717. 8140 PRINT " *** Saved Stat Log file to "; F$; " ***"
  718. 8150 CLOSE 6
  719. 8160 RETURN
  720. 8170 '
  721. 8180 '
  722. 8190 END
  723.  J%=1 TO N%
  724. 7930 PRINT #6, USING "    ###    ####### "; J%, CCNT%(J%)
  725. 7940 NEXT J%
  726. 7950 PRINT #6, " " : PRINT #6